Skip to content

Conversation

@traviscross
Copy link
Contributor

@traviscross traviscross commented Nov 16, 2025

We had said that the dereference operator could not be used with raw pointers in a constant expression. However, that restriction has been lifted. First, in Rust 1.58, we stabilized
const_raw_ptr_deref.

rust-lang/rust#89551

This allowed for dereferencing immutable raw pointers in a constant expression. Then, in Rust 1.83, we stabilized const_mut_refs and const_refs_to_cell.

rust-lang/rust#129195

That allowed for:

  • Mentioning &mut types.
  • Creating &mut and *mut values.
  • Creating &T and *const T values where T contains interior mutability.
  • Dereferencing &mut and *mut values (both for reads and writes).

Let's remove the stated restriction on dereferencing raw pointers in a constant expression and add examples.

cc @ehuss @RalfJung


I noticed this when double-checking that we didn't need to do anything for:

cc @rust-lang/fls

@rustbot rustbot added the S-waiting-on-review Status: The marked PR is awaiting review from a maintainer label Nov 16, 2025
@traviscross traviscross force-pushed the TC/remove-restriction-on-dereferencing-pointers-in-const branch 2 times, most recently from 3dab34b to 71865f1 Compare November 16, 2025 08:53
@traviscross traviscross force-pushed the TC/remove-restriction-on-dereferencing-pointers-in-const branch from 71865f1 to 7fb0ff8 Compare November 18, 2025 21:50
We had said that the dereference operator could not be used with raw
pointers in a constant expression.  However, that restriction has been
lifted.  First, in Rust 1.58, we stabilized `const_raw_ptr_deref`.

rust-lang/rust#89551

This allowed for dereferencing immutable raw pointers in a constant
expression.  Then, in Rust 1.83, we stabilized `const_mut_refs` and
`const_refs_to_cell`.

rust-lang/rust#129195

That allowed for:

- Mentioning `&mut` types.
- Creating `&mut` and `*mut` values.
- Creating `&T` and `*const T` values where `T` contains interior
  mutability.
- Dereferencing `&mut` and `*mut` values (both for reads and writes).

Let's remove the stated restriction on dereferencing raw pointers in a
constant expression and add examples.
To define what's allowed in a constant expression, we have a list that
starts with the text:

> The following expressions are constant expressions...

Correspondingly, most of the items in this list are stated in terms of
being a "this expression" or a "that expression".  However, for deref,
we had instead said "the dereference operator".  Even though the
`expr.deref` section is currently titled "the dereference operator",
it seems more clear and consistent in the context of this list to talk
about dereference expressions, so let's do that.  These are
expressions, after all, The grammar production is named
`DereferenceExpression`.

(There is one other place in the list that we talk about operators:
"built-in negation, arithmetic, logical, comparison, or lazy boolean
operators used on integer and floating point types, `bool`, and
`char`."  Perhaps we'll reword that one later.  It stands out a bit
less than this one did.)
@traviscross traviscross force-pushed the TC/remove-restriction-on-dereferencing-pointers-in-const branch from 7fb0ff8 to 0659e98 Compare November 18, 2025 21:52
Copy link
Contributor

@ehuss ehuss left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Thanks!

@ehuss ehuss enabled auto-merge November 18, 2025 21:54
@ehuss ehuss added this pull request to the merge queue Nov 18, 2025
Merged via the queue into master with commit ef2c2f2 Nov 18, 2025
5 checks passed
@rustbot rustbot removed the S-waiting-on-review Status: The marked PR is awaiting review from a maintainer label Nov 18, 2025
jhpratt added a commit to jhpratt/rust that referenced this pull request Nov 29, 2025
Update books

## rust-lang/book

2 commits in f78ab89d7545ac17780e6a367055cc089f4cd2ec..8c0eacd5c4acbb650497454f3a58c9e8083202a4
2025-11-18 15:36:41 UTC to 2025-11-18 15:33:41 UTC

- Update ch07-02-defining-modules-to-control-scope-and-privacy.md (rust-lang/book#4570)
- use AND for search terms (rust-lang/book#4573)

## rust-lang/reference

4 commits in f9f1d2a4149f02582aec2f8fcdfa5b596193b4e2..f2ac173df9906de5c03b0ee50653321ef1c4ebe8
2025-11-26 02:52:23 UTC to 2025-11-18 21:54:51 UTC

- document `cfg` conditions on inline assembly templates and operands (rust-lang/reference#2063)
- remove unused "link reference definitions" (rust-lang/reference#2092)
- Add review process overview to review-policy.md (rust-lang/reference#2088)
- Remove restriction on dereferencing pointers in const (rust-lang/reference#2090)

## rust-lang/rust-by-example

5 commits in f944161716230641605b5e3733e1c81f10047fd4..111cfae2f9c3a43f7b0ff8fa68c51cc8f930637c
2025-11-27 20:16:42 UTC to 2025-11-20 21:40:02 UTC

- Use `From::from` fn pointer to convert to boxed errors (rust-lang/rust-by-example#1906)
- link the _tuple_ page instead "TupleStruct" (rust-lang/rust-by-example#1909)
- enum_use.md: avoid an uncommon term (rust-lang/rust-by-example#1976)
- make search less surprising (rust-lang/rust-by-example#1975)
- Update documentation for `any` function in iter_any.md (rust-lang/rust-by-example#1973)
rust-timer added a commit to rust-lang/rust that referenced this pull request Nov 29, 2025
Rollup merge of #149424 - rustbot:docs-update, r=ehuss

Update books

## rust-lang/book

2 commits in f78ab89d7545ac17780e6a367055cc089f4cd2ec..8c0eacd5c4acbb650497454f3a58c9e8083202a4
2025-11-18 15:36:41 UTC to 2025-11-18 15:33:41 UTC

- Update ch07-02-defining-modules-to-control-scope-and-privacy.md (rust-lang/book#4570)
- use AND for search terms (rust-lang/book#4573)

## rust-lang/reference

4 commits in f9f1d2a4149f02582aec2f8fcdfa5b596193b4e2..f2ac173df9906de5c03b0ee50653321ef1c4ebe8
2025-11-26 02:52:23 UTC to 2025-11-18 21:54:51 UTC

- document `cfg` conditions on inline assembly templates and operands (rust-lang/reference#2063)
- remove unused "link reference definitions" (rust-lang/reference#2092)
- Add review process overview to review-policy.md (rust-lang/reference#2088)
- Remove restriction on dereferencing pointers in const (rust-lang/reference#2090)

## rust-lang/rust-by-example

5 commits in f944161716230641605b5e3733e1c81f10047fd4..111cfae2f9c3a43f7b0ff8fa68c51cc8f930637c
2025-11-27 20:16:42 UTC to 2025-11-20 21:40:02 UTC

- Use `From::from` fn pointer to convert to boxed errors (rust-lang/rust-by-example#1906)
- link the _tuple_ page instead "TupleStruct" (rust-lang/rust-by-example#1909)
- enum_use.md: avoid an uncommon term (rust-lang/rust-by-example#1976)
- make search less surprising (rust-lang/rust-by-example#1975)
- Update documentation for `any` function in iter_any.md (rust-lang/rust-by-example#1973)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

5 participants